// 入口文件，它只会执行1次，或许你刷新它才会重新执行
import router from './router'
import store from './store'
// 你已经在前端定义好了完整的路由规则表了，为何还要在后端接口中在定义一份?
// 答：后端的定义它是一个根据角色来动态变化的，它会生成对应路由规则表，而前端定义的完整的规则表，用来进行vue-router它要渲染时，所需要的，后面定义的规则表是用于给前端来在完整的路由规则表中去匹配所用的。
// 自动导入router/routes下面所有的子路由配置
// children它是一个完整的后台管理的路由表
const moduleFn = require.context('./router/routes', false, /\.js$/i)
const children = moduleFn.keys().reduce((prev, path) => {
  const value = moduleFn(path).default
  if (Array.isArray(value)) {
    prev.push(...value)
  } else {
    prev.push(value)
  }
  return prev
}, [])

// 前置导航守卫
let childs = 0
router.beforeEach((to, from, next) => {
  // 第1次或不是登录页才进行动态路由添加
  if (childs === 0 && !to.meta.nologin) {
    // 后端接口返回的路由规则
    const allowRoutes = store.getters.routes
    const routes = children.filter(item => allowRoutes.includes(item.path))
    for (let i = 0; i < routes.length; i++) {
      router.addRoute('admin', routes[i])
      childs = 1
    }
    // 重定向
    next({ ...to })
  } else {
    next()
  }
})

// 后端接口返回的路由规则  window.location.href
// const allowRoutes = ['/film/list', '/dashoard', '/film/add']
// const routes = children.filter(item => allowRoutes.includes(item.path))
// for (let i = 0; i < routes.length; i++) {
//   router.addRoute('admin', routes[i])
//   childs = 1
// }

// router.addRoute('admin', {
//   path: '/film/add',
//   component: () => import('@/views/filmAdd'),
//   meta: {
//     breadcrumb: [{ to: '/dashoard', name: '首页@' }, { name: '电影管理' }, { name: '新增电影' }]
//   }
// })
